package com.proyecto.core.modelo.servicio.interfaces;

import java.util.List;

import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTransactionManager;

import com.proyecto.core.modelo.DAOGenerico;
import com.proyecto.core.modelo.excepciones.GeneralException;

public interface IServicioTransaccion {
	
	public void EjecutarServicioSinValid(Object o, Integer servicio) throws GeneralException;
		
	public void incluir(Object o, boolean iniciaTransaccion) throws GeneralException;
	
	public void incluir(Object pojo, Session s) throws GeneralException;//Prueba con transacciones
	
	public void modificar(Object o, boolean iniciaTransaccion)throws GeneralException;
	
	public void modificar(Object pojo, Session s) throws GeneralException;//Prueba con transacciones

	public void eliminar(Object o, boolean iniciaTransaccion)throws GeneralException;
	public void eliminar(Object pojo, Session s) throws GeneralException;//Prueba con transacciones

	public Object consultar(Object o)throws GeneralException;
	
	public Object consultar(Object o, Session s) throws GeneralException;

	public List consultarTodos(Object o)throws GeneralException;
	
	public List consultarTodosPorRangos(Object o, int limiteInferior, int limiteSuperior) throws GeneralException;
	
	public List buscarCatalogoPorPropiedad(String[] atributo, Object[] valor, int tipoBusqueda,boolean ... aplicarUpper)throws GeneralException;
	
	public int buscarCatalogoPorPropiedadCount(String[] atributo, Object[] valor, int tipoBusqueda,boolean ... aplicarUpper) throws GeneralException;
	
	public int buscarCatalogoPorPropiedadCount(String[] atributo, Object[] valor, int tipoBusqueda, int condicionFiltro, boolean ... aplicarUpper) throws GeneralException;
	public int buscarCatalogoPorPropiedadCountEspecialMedicamento(String[] atributo, Object[] valor, int tipoBusqueda, int condicionFiltro, boolean ... aplicarUpper) throws GeneralException;
	
	public List buscarCatalogoPorPropiedadPorRangos(String[] atributo, Object[] valor,int limiteInferior, int limiteSuperiro, int tipoBusqueda, boolean ... aplicarUpper) throws GeneralException;
	
	public List buscarCatalogoPorPropiedadPorRangos(String[] atributo, Object[] valor,int limiteInferior, int limiteSuperiro, int tipoBusqueda, int condicionFiltro, boolean ... aplicarUpper) throws GeneralException;
	public List buscarCatalogoPorPropiedadPorRangosEspecialMedicamento(String[] atributo, Object[] valor,int limiteInferior, int limiteSuperiro, int tipoBusqueda, int condicionFiltro, boolean ... aplicarUpper) throws GeneralException;
	
	public Object obtenerDTOInicianlizado()throws GeneralException;
	
	public Long buscarMaxCount(String[] atributo, Object[] valor, int tipoBusqueda)throws GeneralException;
	
	public Long buscarMaxCount(String[] atributo, Object[] valor, int condicionFiltro, int tipoBusqueda) throws GeneralException; 
	public Long buscarMaxCountEspecialMedicamento(String[] atributo, Object[] valor, int condicionFiltro, int tipoBusqueda) throws GeneralException; 
	
	public boolean isValidacionActiva();

	public void setValidacionActiva(boolean validacionActiva);

//	public Integer ejecutarQueryDMLk(String  query, boolean iniciaTransaccion) throws Exception;
	public List ejecutarQueryHQL(String hqlQuery)throws GeneralException;
	
	public void ejecutarQueryDMLk(String query, Session sesion) throws Exception;
	
	public DAOGenerico getPropiedadDAO();
	
	public HibernateTransactionManager getTransaccion();
	
	public Object ejecutarMetodo(String nombreMetodo, Object[] arregloParametros) throws GeneralException;
	
}
